﻿using System.Windows.Forms;
namespace TwinHead.Frameworks.WindowForms.KeyActions
{
    /// <summary>
    /// 단축키와 연결된 액션클래스를 추상화 하는 클래스입니다.
    /// </summary>
    public abstract class AbstractKeyAction : IKeyAction
    {
        /// <summary>
        /// 단축키가 호출되면, 실행할 대리자
        /// </summary>
        protected MethodInvoker actionMethod;

        string diplayText = string.Empty;
        /// <summary>
        /// 이 액션을 호출하는데 필요한 단축키를 표시하는 문자열을 설정하거나 반환합니다.
        /// </summary>
        public string DisplayText
        {
            get { return diplayText; }
            set { diplayText = value; }
        }
        string description = string.Empty;
        /// <summary>
        /// 어떤 기능을 하는 액션인지 설명하는 문자열을 설정하거나 반환합니다.
        /// </summary>
        public string Description
        {
            get { return description; }
            set { description = value; }
        }

        /// <summary>
        /// 기본 생성자 입니다.
        /// </summary>
        public AbstractKeyAction()
        {
        }

        /// <summary>
        /// 기본 생성자 입니다.
        /// </summary>
        /// <param name="method">단축키가 호출되면, 실행할 대리자</param>
        public AbstractKeyAction( MethodInvoker method )
        {
            actionMethod = method;
        }

        /// <summary>
        /// 이 액션과 연결된 기능을 호출하여 실행합니다.
        /// </summary>
        /// <param name="ctl"></param>
        /// <returns></returns>
        public abstract bool Execute( Control ctl );

        /// <summary>
        /// 이 액션과 연결된 기능을 호출하여 실행합니다.
        /// </summary>
        /// <param name="ctl"></param>
        /// <returns></returns>
        public virtual bool Execute( object ctl )
        {
            return Execute( ctl as Control );
        }

    }
}
